home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / tex / tools / dvi_300b / treiber / dvinadel.lzh / dvinadel / dvi_low.s < prev    next >
Text File  |  1995-09-20  |  8KB  |  326 lines

  1. ; ======================================================
  2. ;
  3. ;  Ein paar schnell Low-Level-Routinen für den Ausdruck
  4. ;  mit DVI.APP
  5. ;
  6. ;  Version 1.1
  7. ;  Copyright (c) Markus Kohm, 1995
  8. ;
  9. ;  Diese Routinen wurden für PASM umgeschrieben und
  10. ;  sind deshalb nicht getestet!
  11. ;  Wer einen anderem Assembler verwendet muß lediglich
  12. ;  die ".MODULE xyz" durch "xyz:" ersetzen und die
  13. ;  ".ENDMOD" rauswerfen.
  14. ;  Wird weder Pure noch Turbo C verwendet, muß außerdem
  15. ;  die Parameterübergabe angepaßt werden.
  16. ;
  17. ; ======================================================
  18.  
  19. USEPRN=1  ; Standardausgabekanal verwenden
  20.  
  21. .GLOBL Fwrite, Fopen, Fcreate, Fseek, Fclose
  22.  
  23. .BSS
  24. ; int prt_handle;
  25. .MODULE prt_handle
  26.           .ds.w 1
  27. .ENDMOD
  28.  
  29. .DATA
  30. .IF USEPRN
  31. ; const char *STANDARDPRN = "PRN:";
  32. .MODULE STANDARDPRN
  33.           .dc.b "PRN:",0,0
  34. .ELSE
  35. ; const char *PRINTBRD = "PRINTBRD";
  36. .MODULE PRINTBRD
  37.           .dc.b "PRINTBRD",0,0
  38. .ENDIF
  39. .ENDMOD
  40.  
  41. .DATA
  42. ; const char *DEFAULTPRINTBRD = "C:\\PRINTBRD";
  43. .MODULE DEFAULTPRINTBRD
  44.           .dc.b "C:\PRINTBRD",0
  45. .ENDMOD
  46.  
  47. .TEXT
  48. ; int prt_open( const char *filename );
  49. .GLOBL prt_open
  50. .GLOBL getenv, Tgettime, Tgetdate ;wird benötigt
  51. .MODULE prt_open
  52.           move.l  A0,D0
  53.           bne     weiter2
  54.  
  55. .IF USEPRN
  56.           lea.l   STANDARDPRN,A0
  57. .ELSE
  58.           lea.l   PRINTBRD,A0
  59.           bsr     getenv
  60.           move.l  A0,D0
  61.           bne     makename
  62.           lea.l   DEFAULTPRINTBRD,A0
  63. makename: link    A6,#-128
  64.           move.l  A5,-(A7)
  65.           lea.l   4(A7),A5
  66. cpyloop:  move.b  (A0)+,(A5)+
  67.           bne     cpyloop
  68.           moveq   #'\',D0
  69.           cmp.b   -2(A5),D0
  70.           beq     weiter1
  71.           move.b  D0,-1(A5)
  72.           clr.b   (A5)+
  73. weiter1:  addq.l  #7,A5
  74.           bsr     Tgettime
  75.           moveq   #3,D2
  76. timeloop: move.b  D0,D1
  77.           lsr.w   #4,D0
  78.           and.b   #15,D1
  79.           cmp.b   #9,D1
  80.           bls     digit1
  81.           add.b   #'A',D1
  82.           bra     tloope
  83. digit1:   add.b   #'0',D1
  84. tloope:   move.b  D1,-(A5)
  85.           dbra    D2,timeloop
  86.           bsr     Tgetdate
  87.           moveq   #3,D2
  88. dateloop: move.b  D0,D1
  89.           lsr.w   #4,D0
  90.           and.b   #15,D1
  91.           cmp.b   #9,D1
  92.           bls     digit2
  93.           add.b   #'A',D1
  94.           bra     dloope
  95. digit2:   add.b   #'0',D1
  96. dloope:   move.b  D1,-(A5)
  97.           dbra    D2,dateloop
  98.           addq.l  #8,A5
  99.           move.b  #'.',(A5)+
  100.           move.b  #'P',(A5)+
  101.           move.b  #'R',(A5)+
  102.           move.b  #'T',(A5)+
  103.           move.b  #0,(A5)
  104.           move.l  (A7)+,A5
  105.           move.l  A7,A0
  106.           bra     weiter3
  107. .ENDIF
  108.  
  109. weiter2:  link    A6,#0
  110. weiter3:  moveq   #1,D0
  111.           move.l  A0,-(A7)
  112.           bsr     Fopen
  113.           move.l  (A7)+,A0
  114.           tst.l   D0
  115.           bmi     test
  116.           move.w  D0,prt_handle
  117.           move.w  D0,D1
  118.           moveq   #0,D0
  119.           moveq   #2,D2
  120.           bsr     Fseek
  121. ok:       moveq   #0,D0
  122.  
  123. ende:     unlk    A6
  124.           rts
  125.  
  126. test:     cmp.l   #-33,D0
  127.           bne     ende
  128.           moveq   #0,D0
  129.           bsr     Fcreate
  130.           tst.l   D0
  131.           bmi     ende
  132.           move.w  D0,prt_handle
  133.           bra     ok
  134. .ENDMOD
  135.  
  136. .TEXT
  137. ; int prt_close(void);
  138. .GLOBL prt_close
  139. .MODULE prt_close
  140.           move.w  prt_handle,D0
  141.           bra     Fclose
  142. .ENDMOD
  143.  
  144. .TEXT
  145. ; int prt_byte(int byte);
  146. .GLOBL prt_byte
  147. .MODULE prt_byte
  148.           move.w  D0,-(A7)
  149.           lea.l   1(A7),A0
  150.           moveq   #1,D1
  151.           move.w  prt_handle,D0
  152.           bsr     Fwrite
  153.           addq.l  #2,A7
  154.           rts
  155. .ENDMOD
  156.  
  157. .TEXT
  158. ; long prt_string(const char *str);
  159. .GLOBL prt_string
  160. .MODULE prt_string
  161.           movea.l A0,A1
  162.           moveq.l #-1,D1
  163.           moveq.l #1,D0
  164.  
  165. loop:     add.l   D0,D1
  166.           move.b  (A1)+,D2
  167.           bne     loop
  168.  
  169.           tst.l   D0
  170.           beq     end
  171.           move.w  prt_handle,D0
  172.           bra     Fwrite
  173.  
  174. end:      rts
  175. .ENDMOD
  176.  
  177. .TEXT
  178. ; long prt_block(const char *block, long size);
  179. .GLOBL prt_block
  180. .MODULE prt_block
  181.           move.l  D0,D1
  182.           move.w  prt_handle,D0
  183.           bra     Fwrite
  184. .ENDMOD
  185.  
  186. .TEXT
  187. ; void prt_prtcpy(char *dst, char *srs,
  188. ;                 int bytesperline, int width,
  189. ;                 int headheight);
  190. .GLOBL prt_prtcpy
  191. .MODULE prt_prtcpy
  192. SaveRegs  REG     D4-D7/A2
  193.           movem.l #SaveRegs,-(A7)
  194.           moveq   #7,D4             ;7. Bit bis 0. Bit testen
  195.  
  196.           bra     loop1e
  197. loop1:    ;Es wird die gesamte Breite von links nach rechts durchlaufen
  198.           movea.l A1,A2             ;A2 = Adresse der aktuellen Zeile
  199.           move.w  D2,D5             ;D5 = Byteläufer
  200.           bra     loop2e
  201.  
  202. loop2:    moveq   #7,D6             ;7. Bit bis 0. Bit setzen
  203.           moveq   #0,D7             ;und zwar hier
  204.  
  205. loop3:    btst    D4,(A2)           ;ist das D4. Quell-Bit gesetzt?
  206.           beq     bitisok           ;nein: ---> Bit richtig gesetzt
  207.           bset    D6,D7             ;ja: D6. Zielbit setzen
  208. bitisok:  adda.w  D0,A2
  209. loop3e:   dbra    D6,loop3          ;nächstes Zielbit
  210.  
  211.           move.b  D7,(A0)+          ;Zielbyte schreiben
  212. loop2e:   dbra    D5,loop2          ;headheight durchlaufen
  213.  
  214.           subq.w  #1,D4             ;nächstes Quellbit
  215.           bcc     loop1             ;in diesem Byte: ---> dabei bleiben
  216.           addq.l  #1,A1             ;nächstes Byte
  217.           moveq   #7,D4             ;wieder ab Bit 7
  218. loop1e:   dbra    D1,loop1
  219.  
  220.           movem.l (A7)+,#SaveRegs
  221.           rts
  222. .ENDMOD
  223.  
  224. .TEXT
  225. ; void prt_prtcpysome(char *dst, char *srs,
  226. ;                     int bytesperline, int width,
  227. ;                     int headheight, int pixellines);
  228. .GLOBL prt_prtcpysome
  229. .MODULE prt_prtcpysome
  230. SaveRegs  REG     D3-D7/A2
  231.           movem.l #SaveRegs,-(A7)
  232.           move.w  28(A7),D3         ;pixellines
  233.           moveq   #7,D4             ;7. Bit bis 0. Bit testen
  234.  
  235.           bra     loop1e
  236. loop1:    ;Es wird die gesamte Breite von links nach rechts durchlaufen
  237.           move.w  D3,D7             ;alle erlaubten Zeilen
  238.           movea.l A1,A2             ;A2 = Adresse der aktuellen Zeile
  239.           move.w  D2,D5             ;D5 = Byteläufer
  240.           bra     loop2e
  241.  
  242. loop2:    moveq   #8,D6             ;7. Bit bis 0. Bit setzen
  243.           bra     loop3e
  244.  
  245. loop3:    btst    D4,(A2)           ;ist das D4. Quell-Bit gesetzt?
  246.           beq     bitisok           ;nein: ---> Bit richtig gesetzt
  247.           bset    D6,(A0)           ;ja: D6. Zielbit setzen
  248. bitisok:  adda.w  D0,A2
  249. loop3e:   subq.w  #1,D7
  250.           dble    D6,loop3          ;nächstes Zielbit
  251.  
  252.           addq.l  #1,A0
  253. loop2e:   move.b  #0,(A0)           ;löschen
  254.           dbra    D5,loop2          ;headheight durchlaufen
  255.  
  256.           subq.w  #1,D4             ;nächstes Quellbit
  257.           bcc     loop1             ;in diesem Byte: ---> dabei bleiben
  258.           addq.l  #1,A1             ;nächstes Byte
  259.           moveq   #7,D4             ;wieder ab Bit 7
  260. loop1e:   dbra    D1,loop1
  261.  
  262.           movem.l (A7)+,#SaveRegs
  263.           rts
  264. .ENDMOD
  265.  
  266. .TEXT
  267. ; long prt_whitebytes(char *buffer, long bytes);
  268. .GLOBL prt_whitebytes
  269. .MODULE prt_whitebytes
  270.           move.l  D0,D1
  271.           bne     precnt
  272.           moveq   #0,D0
  273.           rts
  274.  
  275. precnt:   moveq   #0,D0
  276. preloop:  move.l  A0,D2
  277.           and.l   #3,D2
  278.           beq     maincnt
  279.           tst.b   (A0)+
  280.           bne     ende
  281.           addq.l  #1,D0
  282.           subq.l  #1,D1
  283.           bne     preloop
  284.           bra     ende
  285.  
  286. maincnt:  move.l  D1,D2
  287.           beq     ende
  288.           lsr.l   #2,D2
  289.           beq     postcnt
  290. mainloop: tst.l   (A0)+
  291.           bne     ppostcnt
  292.           addq.l  #4,D0
  293.           subq.l  #1,D2
  294.           bne     mainloop
  295.           bra     postcnt
  296.  
  297. ppostcnt: subq.l  #4,A0
  298.           moveq   #3,D1
  299.  
  300. postcnt:  and.l   #3,D1
  301.           beq     ende
  302. postloop: tst.b   (A0)+
  303.           bne     ende
  304.           addq.l  #1,D0
  305.           subq.l  #1,D1
  306.           bne     postloop
  307.  
  308. ende:     rts
  309. .ENDMOD
  310.  
  311. .TEXT
  312. ; void *memor( void *dst, const void *srs, unsigned long size );
  313. .GLOBL memor
  314. .MODULE memor
  315.           move.l  A0,D1
  316.           beq     ende
  317.  
  318. loop:     move.b  (A1)+,D2
  319.           or.b    D2,(A0)+
  320.           subq.l  #1,D0
  321.           bne     loop
  322.  
  323.           move.l  D1,A0
  324. ende:     rts
  325. .ENDMOD
  326.